import { LayerManager } from '../manager/LayerManager'
import { OverlayManager } from '../manager/overlayManager';
import { MapManager } from '../manager/MapManage'
import { InteractionManager } from '../Interaction/InteractionManager'
export default class KspMap {
  constructor(map) {
    this.map = map;
    this.views = map.getView(); //视图容器
    this.layers = map.getAllLayers(); //图层容器
    this.layerManager = new LayerManager(map)
    this.overlayManager = new OverlayManager(map)
    this.mapManager = new MapManager(map)
    this.interactionManager = new InteractionManager(
      map
    )
  }

  getOlMap() {
    return this.map;
  }
  /**
   * 创建矢量图层
   * @param type 创建图层类型，Point：点，LineString：线，Polygon：面
   * @param vectorLayerConfig 图层初始化配置参数
   */
  createVectorLayer(vectorLayerConfig) {
    this.layerManager.createLayer(vectorLayerConfig)
    if (vectorLayerConfig['overlay']) {
      this.overlayManager.createCustomOverlay(vectorLayerConfig)
    }
  }
  /**
   * 清空矢量图层
   * @param {*} layerId //图层id
   * @param {*} overlay //是否有overlay图层
   */
  removeVectorLayer(layerId, overlay) {
    this.layerManager.removeVectorLayer(layerId)
    if (overlay) {
      this.overlayManager.removeOverlayByLayerId(layerId)
    }
  }
  /**
   * 清除所有overlays图层
   */
  removeAllOverlays() {
    this.overlayManager.removeAllOverlays()
  }
  /**
   * 创建wfs图层
   * @param {*} wfsparams 
   * @param {*} url 
   * @param {*} style 
   */
  createwfsLayer(layerId, url, style) {
    this.layerManager.createwfsLayer(layerId, url, style)
  }
  /**
   * 创建wms图层
   * @param {*} wmsparams 
   * @param {*} url 
   */
  createwmsLayer(layerId, wmsparams, url) {
    this.layerManager.createwmsLayer(layerId, wmsparams, url)
  }

  /**
 * 添加一个地图事件
 * @param type 地图事件类型，包括：singleclick(单击)，dblclick(双击)，pointermove（地图鼠标移动），pointerdrag（鼠标拖拽）
 * @param callback 事件响应函数
 */
  addMapEvent(type, callback) {
    // callback({
    //   a:1
    // })
    // let rF = callback
    this.mapManager.onMapEvent(type,(e) =>{
      callback(e)
    })
    // console.log(type, callback)
  }

  /**
   * 创建矢量要素点图标
   * @param callback 绘制矢量要素点图标回调函数，返回当前绘制点坐标给回调
   * @param styleConfig 绘制矢量要素点图标样式设置
   */
  drawMarkerFeature(callback, styleConfig) {
    this.interactionManager.createMarkerFeature(callback, styleConfig)
  }

  /**
   * 清除所有绘制内容
   */
  deleteAllDrawFeature() {
    this.interactionManager.clearDrawLayerFeatures()
  }




  /**
   * 开始一次测量功能
   * @param type 测量的类型，包括：LineString(距离测量), Polygon(面积测量)
   * @param type 测量的类型，包括：LineString(距离测量), Polygon(面积测量)
   * @param callback 测量结果回调，返回测量结果给回调函数
   * @param isPoint 是否需要绘制起点和终点
   * @param isDel 是否需要显示删除按钮
   */
  startMeasure(type, param, callback) {
    if (type === 'Length') {
      this.interactionManager.startMapMeasure('LineString', param, callback)
    } else if (type === 'Area') {
      this.interactionManager.startMapMeasure('Polygon', param, callback)
    }
  }


}
